package com.chenchao.reflection;

import java.lang.reflect.Field;

/**
 * @encoding : UTF-8
 * @Time : 2020/11/21 21:17
 * @Author : Chen Chao
 * @File : javaSE.com.chenchao.javareflection.Test05.java
 * @Software : IntelliJ IDEA
 * @since : 1.8
 * 通过反射技术获取成员变量并使用
 */
public class Test05 {
    public static void main(String[] args) throws Exception {
        //获取字节码对象
        Class c=Class.forName("com.chenchao.reflection.Fish.java");
        //获取构造器对象，并创建实例对象
        Fish fish= (Fish)c.getConstructor().newInstance();
        //获取属性变量
            //获取公共属性变量
        Field name = c.getField("name");
        System.out.println(name);
        Field length = c.getDeclaredField("length");

        System.out.println(length);
            //获取私有属性变量
        System.out.println("===========");
        Field[] declaredFields = c.getDeclaredFields();
            //获取所有属性(包括公开属性)
        for (Field declaredField : declaredFields) {
            System.out.println(declaredField);
        }

        //设置属性变量
        name.set(fish,"鲢鱼");
            //设置公共属性
        length.setAccessible(true);
        length.set(fish,10);
            //设置私有属性，需要暴力访问
        //打印实例对象
        System.out.println(fish);
    }
}
